package com.cskaoyan.javase.basic._4extend;

/**
 * 扩展一:
 * 浮点数的精度问题
 * 浮点数之所以存在精度问题,本质上是它自身的原因
 * 由于尾数位的限制,能够表示的有效数字是有限的
 *
 * 除此之外,也有二进制小数自身的原因,二进制小数也可能存在无限循环的情况
 * 十进制正小数（0.开头）转换成二进制，先用小数部分乘以2，取结果的整数部分(必然是1或者0)，
 * 以0.1为例子:
 * 0.1 * 2 = 0.2 -- 0
 * 0.2 * 2 = 0.4 -- 0
 * 0.4 * 2 = 0.8 -- 0
 * 0.8 * 2 = 1.6 -- 1
 * 0.6 * 2 = 1.2 -- 1
 * 0.2 * 2 = 0.4 -- 0
 * ...
 *
 * @since 17:43
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        float f1 = 0.1F;
        // f2超出了float的有效尾数限制,和f1并没有区别了
        float f2 = 0.1000000000000001F;
        System.out.println(f1 == f2);
        System.out.println(0.1 == 0.1F);
        double result1 = 1 - 0.9;
        float result2 = 1 - 0.9F;
        System.out.println(result1);
        System.out.println(result2);
    }
}
